<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Цели бројеви</title>
</head>
<body>

<form name="main">
 Result: <output name="result"></output>
 <script>
 
  var PLUS = '+'
  var MINUS = '-'

  function CeoBroj(z, a) {

// ОСНОВНЕ ОСОБИНЕ

   this.znak = z
   this.apVr = a

// ПОРЕЂЕЊЕ СА НУЛОМ

   this.jeNula = this.apVr == 0
   this.nijeNula = !this.jeNula

   this.jePozitivan = this.nijeNula && this.znak == PLUS
   this.jeNegativan = this.nijeNula && this.znak == MINUS

// СУПРОТНА ВРЕДНОСТ

   this.suprotno = function() return new CeoBroj(
    this.jeNegativan ? PLUS : MINUS, this.apVr
   )

// ПРЕТВАРАЊЕ У ТЕКСТ

   this.toString = function()
    return (this.jeNegativan ? MINUS : '') + this.apVr

// УПОРЕЂИВАЊЕ ЦЕЛИХ БРОЈЕВА

   this.imaIstiZnakKao(that) = function(that) return this.znak == that.znak   
   this.imaVecuApVrOd(that) = function(that) return this.apVr > that.apVr

   this.jeVeceOd = function(that) return this.jeNegativan ?
    that.jeNegativan && that.imaVecuApVrOd(this) :
    that.jeNegativan || this.imaVecuApVrOd(that)

// ОПЕРАЦИЈЕ СА ЦЕЛИМ БРОЈЕВИМА

// Сабирање (најсложенија операција са целим бројевима)

   this.plus = function(that) return that.imaVecuApVrOd(this) ? that.plus(this) :
    new CeoBroj(
     this.znak, this.imaIstiZnakKao(that) ?
     this.apVr + that.apVr :
     this.apVr - that.apVr
    )

// Одузимање (најједноставнија операција са целим бројевима)

   this.minus = function(that) return this.plus(that.suprotno())

// Множење

   this.puta = function(that) return new CeoBroj(
    this.imaIstiZnakKao(that) ? PLUS : MINUS,
    this.apVr * that.apVr
   )
   
// Дељење

   this.deljenoSa = function(that) return new CeoBroj(
    this.imaIstiZnakKao(that) ? PLUS : MINUS,
    this.apVr / that.apVr // ако је дељиво
   )

  }

  document.forms.main.elements.result.value = 'Цели бројеви';

 </script>
</form>

</body>
</html>
